{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Requirements"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "\n",
    "import torchvision.utils\n",
    "import torchvision.datasets as dsets\n",
    "import torchvision.transforms as transforms"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Set Args"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "weight_decay = 0\n",
    "num_epochs = 10\n",
    "use_cuda = True\n",
    "batch_size = 100"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Prepare Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "mnist_train = dsets.MNIST(root='data/',\n",
    "                          train=True,\n",
    "                          transform=transforms.ToTensor(),\n",
    "                          download=True)\n",
    "\n",
    "train_loader  = torch.utils.data.DataLoader(dataset=mnist_train, \n",
    "                                          batch_size=batch_size,\n",
    "                                          shuffle=True)\n",
    "\n",
    "mnist_test = dsets.MNIST(root='data/',\n",
    "                          train=False,\n",
    "                          transform=transforms.ToTensor(),\n",
    "                          download=True)\n",
    "\n",
    "test_loader  = torch.utils.data.DataLoader(dataset=mnist_test, \n",
    "                                          batch_size=10000,\n",
    "                                          shuffle=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. Define Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "device = torch.device(\"cuda\" if use_cuda else \"cpu\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "class FC(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(FC, self).__init__()\n",
    "            \n",
    "        self.layer_1 = nn.Sequential(\n",
    "            nn.Linear(28*28, 100),\n",
    "            nn.ReLU()\n",
    "        )\n",
    "        \n",
    "        self.layer_2 = nn.Sequential(\n",
    "            nn.Linear(100, 100),\n",
    "            nn.ReLU()\n",
    "        )\n",
    "        \n",
    "        self.layer_3 = nn.Sequential(\n",
    "            nn.Linear(100, 10)\n",
    "        )\n",
    "        \n",
    "    def forward(self, x):\n",
    "        x = x.view(-1, 28*28)\n",
    "        \n",
    "        out_1 = self.layer_1(x)\n",
    "        out_2 = self.layer_2(out_1)\n",
    "        out_3 = self.layer_3(out_2)\n",
    "    \n",
    "        return out_3, out_2, out_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = FC().to(device)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. Define Loss and Optimizer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "loss = nn.CrossEntropyLoss()\n",
    "optimizer = optim.Adam(model.parameters(), lr=0.001, weight_decay=weight_decay)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. Train Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch [1/10], lter [100/600], Loss: 0.5275\n",
      "Epoch [1/10], lter [200/600], Loss: 0.2618\n",
      "Epoch [1/10], lter [300/600], Loss: 0.1694\n",
      "Epoch [1/10], lter [400/600], Loss: 0.2137\n",
      "Epoch [1/10], lter [500/600], Loss: 0.2742\n",
      "Epoch [1/10], lter [600/600], Loss: 0.2312\n",
      "Epoch [2/10], lter [100/600], Loss: 0.2740\n",
      "Epoch [2/10], lter [200/600], Loss: 0.1189\n",
      "Epoch [2/10], lter [300/600], Loss: 0.1204\n",
      "Epoch [2/10], lter [400/600], Loss: 0.1688\n",
      "Epoch [2/10], lter [500/600], Loss: 0.1166\n",
      "Epoch [2/10], lter [600/600], Loss: 0.1465\n",
      "Epoch [3/10], lter [100/600], Loss: 0.1128\n",
      "Epoch [3/10], lter [200/600], Loss: 0.1074\n",
      "Epoch [3/10], lter [300/600], Loss: 0.1271\n",
      "Epoch [3/10], lter [400/600], Loss: 0.1159\n",
      "Epoch [3/10], lter [500/600], Loss: 0.1479\n",
      "Epoch [3/10], lter [600/600], Loss: 0.1370\n",
      "Epoch [4/10], lter [100/600], Loss: 0.0626\n",
      "Epoch [4/10], lter [200/600], Loss: 0.0596\n",
      "Epoch [4/10], lter [300/600], Loss: 0.0882\n",
      "Epoch [4/10], lter [400/600], Loss: 0.0664\n",
      "Epoch [4/10], lter [500/600], Loss: 0.0475\n",
      "Epoch [4/10], lter [600/600], Loss: 0.0301\n",
      "Epoch [5/10], lter [100/600], Loss: 0.0289\n",
      "Epoch [5/10], lter [200/600], Loss: 0.0791\n",
      "Epoch [5/10], lter [300/600], Loss: 0.0393\n",
      "Epoch [5/10], lter [400/600], Loss: 0.0443\n",
      "Epoch [5/10], lter [500/600], Loss: 0.0456\n",
      "Epoch [5/10], lter [600/600], Loss: 0.0370\n",
      "Epoch [6/10], lter [100/600], Loss: 0.0144\n",
      "Epoch [6/10], lter [200/600], Loss: 0.0218\n",
      "Epoch [6/10], lter [300/600], Loss: 0.0804\n",
      "Epoch [6/10], lter [400/600], Loss: 0.0324\n",
      "Epoch [6/10], lter [500/600], Loss: 0.0569\n",
      "Epoch [6/10], lter [600/600], Loss: 0.1680\n",
      "Epoch [7/10], lter [100/600], Loss: 0.0142\n",
      "Epoch [7/10], lter [200/600], Loss: 0.0238\n",
      "Epoch [7/10], lter [300/600], Loss: 0.0183\n",
      "Epoch [7/10], lter [400/600], Loss: 0.1391\n",
      "Epoch [7/10], lter [500/600], Loss: 0.0201\n",
      "Epoch [7/10], lter [600/600], Loss: 0.0201\n",
      "Epoch [8/10], lter [100/600], Loss: 0.0097\n",
      "Epoch [8/10], lter [200/600], Loss: 0.0093\n",
      "Epoch [8/10], lter [300/600], Loss: 0.0219\n",
      "Epoch [8/10], lter [400/600], Loss: 0.0317\n",
      "Epoch [8/10], lter [500/600], Loss: 0.1303\n",
      "Epoch [8/10], lter [600/600], Loss: 0.0124\n",
      "Epoch [9/10], lter [100/600], Loss: 0.0234\n",
      "Epoch [9/10], lter [200/600], Loss: 0.0358\n",
      "Epoch [9/10], lter [300/600], Loss: 0.0133\n",
      "Epoch [9/10], lter [400/600], Loss: 0.0345\n",
      "Epoch [9/10], lter [500/600], Loss: 0.0470\n",
      "Epoch [9/10], lter [600/600], Loss: 0.0512\n",
      "Epoch [10/10], lter [100/600], Loss: 0.0100\n",
      "Epoch [10/10], lter [200/600], Loss: 0.0154\n",
      "Epoch [10/10], lter [300/600], Loss: 0.0087\n",
      "Epoch [10/10], lter [400/600], Loss: 0.0055\n",
      "Epoch [10/10], lter [500/600], Loss: 0.0107\n",
      "Epoch [10/10], lter [600/600], Loss: 0.0705\n",
      "Learning Finished!\n"
     ]
    }
   ],
   "source": [
    "for epoch in range(num_epochs):\n",
    "    \n",
    "    total_batch = len(mnist_train) // batch_size\n",
    "    \n",
    "    for i, (batch_images, batch_labels) in enumerate(train_loader):\n",
    "        \n",
    "        X = batch_images.to(device)\n",
    "        Y = batch_labels.to(device)\n",
    "        \n",
    "        pre, _, _ = model(X)\n",
    "        cost = loss(pre, Y)\n",
    "        \n",
    "        optimizer.zero_grad()\n",
    "        cost.backward()\n",
    "        optimizer.step()\n",
    "        \n",
    "        if (i+1) % 100 == 0:\n",
    "            print('Epoch [%d/%d], lter [%d/%d], Loss: %.4f'\n",
    "                 %(epoch+1, num_epochs, i+1, total_batch, cost.item()))\n",
    "    \n",
    "print(\"Learning Finished!\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7. Test Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy of test images: 97.620000 %\n"
     ]
    }
   ],
   "source": [
    "model.eval()\n",
    "\n",
    "correct = 0\n",
    "total = 0\n",
    "\n",
    "for images, labels in test_loader:\n",
    "    \n",
    "    images  = images.to(device)\n",
    "    labels  = labels.to(device)\n",
    "    \n",
    "    outputs, _, _ = model(images)\n",
    "    \n",
    "    _, predicted = torch.max(outputs.data, 1)\n",
    "    total += len(labels)\n",
    "    correct += (predicted == labels).sum()\n",
    "    \n",
    "print('Accuracy of test images: %f %%' % (100 * float(correct) / total))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8. Units of $\\phi(x)$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def imshow(img, title):\n",
    "    npimg = img.numpy()\n",
    "    fig = plt.figure(figsize = (10, 20))\n",
    "    plt.imshow(np.transpose(npimg,(1,2,0)))\n",
    "    plt.title(title)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1) Unit Vector "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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3zr99VUserXXXnsBMGZMbu7vRv42mebfKNPXKSuPQkyZMgWA9ddfv2rHrqXrr78eSO5lWrnIVCX7fvTRRwA89NBDQNsIe6NbeeWV4+Vf/epXQBJ5nG++0hV3KrluHtmDJDq47bbbdr6xdfKTn/wkXr7uuusAWHjhhYHKXidQ+vqky9SceeaZmdpZD9///vfj5QMOOABIyvF01mOPPQYkuYwAb775ZqZjVkiRKREREZFaa6rI1DrrrAPA3//+93jdt7/97WyN6iSPjqWjZI1i+eWXB/KjT54D9Mwzz1R8nKFDh8bLI0eOBOD1118HoE+fPlmbWRd+LcqNBPH8r5deeileN3bsWABuuOEGAGbPnh1vW2WVVYAkClrs2J6b5vl66Vy+RlYuMnXLLbcAybW47LLL2vzcsGHDgPy8F+cRqvSovvQIuUbjOYNbb711m21bbbUVkJ+XWIp/RhX7rPXXiX+2QX4UtNF4Lt2dd94Zr+vIPexIRA/giSeeAGDLLbes+Bz1ttFGGwEwbty4eN1iiy0GlP99PdKSvt8LLrggkLy+nL9OILneHhlvdP47bbDBBiX38b8va6yxBgDdu3cvua+PTIekp+X999/P3M4yFJkSERERqTU9TImIiIhk0FTdfM6TqQF+//vf523bbrvt4uVKigt2lhcSK0xibiU/+9nP4uWrr74agLfffhuAlVZaqSua1GGegP7UU08BSXI+JMXkPDHah7JXyoc9n3baaW22efLy/vvv38EWdy1/z6TnbHTvvvsuUD6Z3ov2pRNQ77///rx90sPiDzzwQCBJ2G1FRx55JAAnnnhivM6HkLvf/OY38fJ5551Xn4Z1gifMF+t286R67+76/PPP422F6RB77713vJxOri7UDN18PmTfUwPS/BpceOGF8bprr70WgJdffhnIHzRVSVrCcccdB+SX8WkVnsR/8803x+u6detWcn8fCFUsraCK1M0nIiIiUmulx7A2sHTxzMJv/ukCnYXf/orxYdpHHHEEkCTAtceLqn1TeASz2LevRvbhhx8CsMkmuS8W6fIHnU0K92OlIw2FPBLWbDzy2FlffvklAO+8807JfdJRr6wF/ZqBTz2Tfu2ll5uJTzOULsDas2dPAK644gogv6RKKbvttltF57vooos62sSGcsYZZwBJ8c1q8EFArciT+YtFxp1/xgDMmDGj5m2q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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14ea16febe0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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rlahRERERFpF2X2mkizJ/wP6k+qgOg7YN4TwSvWKJyIiItLcKolMbQK8GUKYGEL4htTQ7EHVKZaIiIhIa6hk9vieZGfanQpsWuwFZqahgyIiItIqPgwhLNHZTpVUpjrM9E6ezLtmNpjUpJsiIiIiraSkycIrqUxNJTWnlFuOVCK9LCGEq4CrQJEpERERaT+V9JkaB/Q2s5WSqSX2AUZXp1giIiIiraHsyFQI4btk9vUHgW7AtSGECZ28TERERKSt1HU6GTXziYiISAsZH0LYqLOdlAFdREREpAKqTImIiIhUQJUpERERkQpUkhpBWtiaa64JwE9/+tP0uquuugqAs846C4Dx48d3eN2jjz4KwJdfflnrIoqISItbeOGFAbj44osBOPDAAwH40Y8ysZwffvgBgFGjRgFw2mmnpbe99dZbdSlnpRSZEhEREamAKlMiIiIiFWib1AgeMlxhhRU6bNt4440B2GyzzdLrdt99dwCWW265rNfffffd6X3uvfdeAG6//XYAPvnkk2oXu26OPvpoANZYYw0AttpqKwDWXXfdgq/JF4a96aabAPjHP/6R3nbnnXdWt7B1Mv/88wOw2GKLAXD88cent+20004A9O7du8Pr3nvvPQD69OkDwAcffFDTckpjHXnkkQCcfvrp6XU9e/bs9HUPPfQQAI899hiQ3Ww+ZsyYahZRGmDuuecG4MorrwTg4IMPLrjviBEj0sv3339/wf38vTJ16tRqFLFhevXKTI7yxBNPALD00ktn7WOWmZEutx7y9ttvp5cvueQSAC699NKql7NESo0gIiIiUmttE5nyTtPxt8eu8Fpyvuvx3HPPAbDzzjun173//vtlnadR7rnnHgAGDhwIZCJNxeSLTLkbb7wxvXzccccB8MUXX1RczlqLI00XXHABALvtthtQ/JtSzPd76aWXgEyUb/bs2dUtrDTU6quvDsDYsWMBWGqppco6jr9fvvnmm/S64cOHA/CrX/2qghJKIy200EIATJkyBYAFFlig4mM+9dRTAPTv3x9ojc/UfHbZZZf0srdcTJ8+HYCXX34ZyP95+5Of/ASARRddtMMxV111VQDeeaekeYerSZEpERERkVprm9QIt912G5AdHRgwYAAA22yzDQCPP/54etvrr7+e9XpPEbDWWmt1OLb3jTnmmGPS6zwS1ipyI1Oe4uDFF19M77P++usD0Ldv306P58NbIfPtySNUzejXv/41kD3kNvfbT5zuIe4TBtkRrQ022ACAddZZB4C1114byHyrnFN4nxGAfv36AZnnIu6fWMzEiRMBOOecc4BM/8Svv/66auUs1yabbAKUH5HKFV+v/fffH4CVVloJgAMOOCC9bebMmVU5XzPxZ8SjuN5fEeCPf/xjp6/3KMapp56aXjds2LBqFrHLvA+t96887LDD0tviz8eu2HTTTQF48MEHAdhnn30AePfdd8suZz3NN998AJxwwgnpdR6RGjRoEJBp6cnH/1b75wBkUivsueeeAFx00UXVK3AVKTIlIiIiUoG26TOVT7du3QCYZ555gOw+C99//33Wvv6tcfvtt0+vGz16dNY+Dz/8cHr5Zz/7WXULWyc77LADAK+88gqQae8HWH755YHMiL+4TXvw4MFAdlt4Lr/Ozci//Q4ZMiS9buTIkQDcd999QPb99RF7Lh7p58fyZ2fLLbcE5pzI1HbbbQdk90/0iEOxvoel8Hvyy1/+Mr3us88+K+tYldp6660B+Pvf/w5A9+7dyzpOKdckTp77zDPPlHWeZuF9hzyiD3DrrbcCHUd0ddVXX32VXj700EOB7ChGI80777zpZY9e53PZZZcBsMoqqwDQo0ePgvv6SDiP6gB89NFHFZWzljyKG0efvDXkhRdeKPk4/vcGMtdr0qRJQP4R1jWmPlMiIiIitabKlIiIiEgF2qYDej7elFfKPHLffvstAIssskjBfa655prqFKyBvGNjPpMnT876GfNQbZwuoZV4k22cDM+blHKb9PKJmzz9GpSSXqKdeNO2N9kUa54ol3e49ecRMh1769klATKDNO644w4gk+A3n3jgyjLLLFPbgjU572zu1w+KN3X6YANvwos/Y3LfY97BGfIPn2+keNBEsSb/jTZKtRh5ShZ/niDTNcVtvvnmAJx88snpdSeddFLlha2RGTNmALDssstWdJw4JYS/dxZccMGKjllrrfmXUURERKRJtHVkqiu8Jv2Xv/ylw7Ynn3wSmPOmgFhzzTXTy97BOF805oorrqhbmcrl0zT4z66Kv1H7Nah3pKQR4o60t9xyC1BaRCpOPXLmmWdmbYunmvCklSuvvHLWPvHQck9J0qgEhkcccUSn+8TPiney9ojavvvuW/B13pn4888/r6SITcGjcx7xLSaO4vz85z8H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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14ea27a1f98>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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MxVV6X03qkTcr1yNEhEREakXRedMRVWS/wvsRypB9VWgewjh7fI1T0RERKRlKyUytSPwfgjhwxDCd6SGZncrT7NERERE6kMps8e3I7PS7nRgp3wPMDMNHRQREZF68XkIYc2mdirlZqrRTO9kqbxrZr1JTbopIiIiUk8Kmiy8lJup6aTmlHLrkyqklyGEMAQYAopMiYiISOtTSs7Uq0BHM9somlriGGBUeZolIiIiUh+KjkyFEH4ws7OAp4A2wLAQwqQmHiYiIiLSqlR1Ohl184mIiEgdmRBC2L6pnVQBXURERKQEupkSERERKYFupkRERERKUEppBKkj8+bNA2DFFVcE4KKLLgLgiiuuqFmbRKT12GKLLQDYZZddABgyZEi87ZJLLgFgwoQJjR73/PPPA/DNN99UuokiFaPIlIiIiEgJdDMlIiIiUoJWXRrhrLPOAmCVVVYB4Mwzz4y3rbXWWk0+fsSIEQBcfvnlALzzzjvlbmLVzJ07F4CVVloJgE8++QSAGTMaFa2PXXDBBY0e777++ut4+YMPPihbO0VqoV27dgCcfvrp8bpDDz0UgK222qrJx5ulZ9f69NNPgfTnxt133w00fg/Vsz59+sTLm2++OQA///nPAdh6661zPu4nP0l9f//xxx/jdXfeeScAjz76KAAPPPBAeRtbJSussEK8fPzxxwNwzTXXALDssss22j/bc5HL1VdfHS/379+/pHZW0lJLLQXA4MGD43U9evTIuq//fQV44oknch7zhRdeAGD69OnlaGIxVBpBREREpNJaXWTqo48+ipfbt2+fZ8/C/e1vfwOgb9++ZTleLTSMTJUqGdE6/PDDARg/fnxZjl0rvXr1ipc9ibZnz54lHfOhhx4C4Ne//nVJx5HK8m/G++23X9mP/dZbbwFwxhlnxOtefvnlsp+nmh555JF4+YADDgAKi7Dki8b84x//AOA3v/lNvG7hwoUltbOakr0dY8eOBWD99dfPub9HMwv5G/zdd9/Fy97jcttttxXVzkpaeeWVAZg2bVq8brnllivpmP5c+nuzBq8JRaZEREREKq3VlUZo27b8v5LnWu29997xum222abs56mktddeG4A11lgDKKwkwnrrrRcv77PPPjm3nXjiiUD9RaYGDhwIpPNkkq+dht8aX3zxxXjb7rvvXvA5unXrBmRGNa+77roiWyyV8sMPPzRaN2fOHACGDx8OwMSJE+Nt+fKC1llnHQCOPPJIADp16gTAgAED4n323HNPoLCoREuULTLlJQ7efPNNIPMzco899mjymCeccAKQGXlIRqlautmzZ8fL/r733ylbhDtfZGqZZZYB0rlWSy+9dLwtX7Sr1r788ksADjrooHjdySefDKSfi+baaaedAHjqqacAOOaYY+JtnvvbEigyJSIiIlKCVpczleyrXXfddTO23XvvvfGy5xDdeuutGY8799xz433OP//8jMcn+/l9ZF/nzp3L0ewWyUdBAuywww4AXH/99UBmP7iPhPr9738PwA033FCtJjZbMirkEUfP48jGc8O6du0ar5syZQqQjvL99re/BWD55ZeP9znllFMyjrNgwYJ4Ofm81kLyW24u33//PVCZyMmDDz4YL/uIOX9+R48eXfbzNcdVV10VL3ubSo1Ce4TL80kg/V7x91M923///QF4++23gfRn6QYbbBDv4yP+PBrTu3fveNshhxyS89iFvFZbI//bc9lll+XcZ7XVVgNg/vz5VWlTsTzK1qVLl5z73HjjjQBsvPHGQLq4dDbJfEOPAH7xxRcltzMP5UyJiIiIVJpupkRERERK0Oq6+ZLDUxt233z++efxcraEU0gXHYN0Ebqnn3660X7e5efD6X1Y75LCnxuAZ599FoDXX38dyAzbewHDlsILKEI6Qdjdf//98fK4ceOAdDfwV1991eSxk0n5U6dOzdiWHNpc6lDh5kgWEvQuAx9anY+XdEh2M3gC9uLFi4tqiyddP/bYY/E6T7D9z3/+A2S+rmohWXzTE2eHDh1a0jGzdfP5+8K7NRYtWlTSOepNsnsz3+uxEgOKWjLv3vISP8nXjPOBDBdffDFQv4MYsjnssMMAuOeee+J1bdq0ybn/tddeCzROySkzdfOJiIiIVFqru+1PDk8thifeAnz22Wc59/OoVzWjDC3dtttuC6QTs6HlRaaSQ5Q9QvKvf/0LKCxymY1/m7rpppvK0cSy8IjUmDFj4nU/+9nPCn68/07+E9JTY/Tr169ZbfGEe48KZptao9ZTiHiCdPI9X2pEyqN62Qrl+nkKKXTZmmyxxRZAZgSy4XNwyy23VLVNLcnqq68OZI9IOY+St6aIlNtuu+2A/IOCkn+j802HVm2KTImIiIiUoNVFpkq16qqrxsvJInsNPfPMMwCMHDmy4m1qic4555xaN6Eo3377bbzsE6wWy79dezmNQibPrhZ/ffo3PUhHAGbNmtVof89NWXPNNXMec8sttyz4/Mkir56Llszfcj5htk/ZVCteVDJZ3qLU4qr+HHgeVnJy8EsvvRTI/Jbdmnk+oeefehHhpHnz5gGZJWyWBB06dIiXH3744Rq2pPa8nFEyd7GhZA/CX//614q3qVCKTImIiIiUQDdTIiIiIiVQN18DyTmFvLKvS84DdNRRRwHpuYiWNM3p8mltDj/8cACGDRsGZO++cp7IfsYZZ1S+YQmebJ5MUvVulPbt2zfa35OkjzjiiJzHfPLJJ5s877777gtkdtU0fH6SFZsPPPBAoHkJ/5UwZMiQsh3L5xLzCtXujTfeiJeXtO6cwYMHA+lunGyJ915eJjkP5pIgmSqS63M1OUCjJXVtlYun1zSctSSbQkq71IIiUyIiIiIlUGQq4sPakzNSO08cveCCC+J1/i1/SeHJ1l5MzYfwJnmhuZY+V1QxfO4ogGOPPRbIH5Fyf/nLXwC4/fbbK9Ku5vDhxh07dgQyE9F9uLVH25rLE7cHDRoEZC8H4LzEAqSLdda7ZOK+J//7nGQeHXzppZeq37Aa8nkXIX9ZDh/e7gVylxQeucw3V6fPQ3faaafF65IFgFsLn7cvOQdqLi21N0iRKREREZESLLGRKc9r8G/JW221FZD9G7UPYx4xYkR1GtdC/P3vf4+XPX8s3/B/L4I5ZcqUyjasinbYYYeMn5B7RvPklCBeLqFWxSj9vL/61a/idf4NePLkyQCMHz8+3ubLN998c8ZxktdywYIFGduSkTmPaG2yySY523TXXXcBcPXVVxf4W7R8Hn3xzwhIR6Scl1jo379/1dpVC16Q08sfZMt/8ejo2WefHa9LRn2XJF4yJN97xguYtsaekCuvvDJeLqTUzscffwzkL6ZdS4pMiYiIiJRAN1MiIiIiJbBqzu9jZjWZTMirQHvXC6RD0p07d875uOeeew6A7t27Ay03vFhuu+++O5A5fDvfXFE+rN1LBjz++OMVbF11+GvG5+3Ll1D99ttvA5lVvGudTOtzzZ1++unxOi/nka/KeUOvvPJKvOwJ6x9++CEAU6dOjbflqxY+Z84cID3s2/9fz7x774477gCyD0a4/vrrgfSM9osXL65S66rLP0t9RoGtt9465759+/YF4IUXXojXTZw4sYKtaxmSZTK8e2/PPfcEMstEeHK5D4QaNWpUtZpYNZtuuimQ+bvl6+r0AWB77bUXAK+//nrlGpfdhBDC9k3tpMiUiIiISAladWTqhBNOANIJjsstt1yTj3n22WfjZR8C3xojUv5NYKONNorXnXnmmUC6DEK+aNQXX3wRL3v045///GfZ21lNyYKVXgZjm222abTfwoULM/a57777AJg9e3alm1gSj7Z5Umty3r5KGjp0KJA5vLserbPOOvGyD7bw10fyc3TSpEkAHHDAAQDMnDmzWk2sGp9rD2Ds2LFA9vn23KmnngrA8OHDK9uwFsajwMnSKL/85S+B9PxzyeRyLxVyyCGHVKmF1ePlDx599FEg8/2Uj38uP/TQQ2Vph0e4IN371ARFpkREREQqrdWVRkgWHTzyyCMB+OlPf5pzfx/uffHFFwNw9913x9vqNSLlBRTbtk1fXp+CYNlllwWgU6dOQDq3pin+zdsLpiWnR6nXiJRH4DzCtPPOO8fbGuZI/fe//42XvRDnbbfdVukmltVrr70GpHPiBgwYEG/zb43+2slXZLG5PELjP0ePHh1vq/U0Ms0xbty4eDkZmQF455134mV/Lovl39ivvfZaIF1OANI5R59++mlJ52guj1J7tL93797xtoZTxHikxaeHgXT0qjXzSBOky6d4OZBf/OIXOR+XfF0VE5Hy9yxAmzZtgHQR3pbEp2orJCKVzKcqdnqhpZZaCkgXmPbXZXI6mgIjUwVRZEpERESkBLqZEhERESlB3Xfz+WzTAwcOBNJde5Du0srGh7xfccUVQOZQ3ZbMhx17EmM2ffr0ATKTy0vl3XtrrLFG2Y5ZTT58+w9/+EO8zofq5+vS8jIAvXr1itfV+3xyPvz6d7/7XaNtPkgjW3K6dzs1twvQu8QeeeQRIHPWe78eLblsgA/MyFf938tjlIOXUjj66KMbbbvooovKdp7m8LlLk5+vufjz5QMzyinZvTp48OCMbbVK2t54442BzM+I8847r8nH+RD/k046qajz+udXskusQ4cOQLqLq1aSXd3ffvstALvuumuTj3vqqaeAzNdZvs+G7bdP5YV7mYmkDTbYAEi/Hn0Gk8MOO6zJdhSjyciUmbU3s2fNbLKZTTKzs6P1q5nZaDN7L/q5akVaKCIiItKCFRKZ+gE4N4TwmpmtCEwws9HAScCYEMIAM+sH9APOr1xT05JD9v2ufJdddsm5vxf9Ss6f5UN0586dW4EWVo7Pe9Wcwovl4MnsnrSdnLn7zTffrGpbGvIEQ0/UTc7C7vOh+TedfNFKf51A+rXihQjrdTBCc3nZh2xJn4XMD3bccccBmfMXekFPHwiSnJfto48+AmDQoEFFtrhyPNLg7U8mgjd08MEHx8ue4N+cxNl+/frFy8kEWYAxY8bEyx988EHBxyxW165dgfQQ9qY0fF48gjl//vyizv+nP/2p0bpLLrkEyCyGm23uv0pLRlw8ouQRxEKj9l6kdL/99gPyv688Gprsifjzn/8MpKPI/vnXEviApmQZA48sedQsHx/MlIxGeWK/H9sHDEG6zEHDASEAn3zyScb/vdTRhRde2GQ7itFkZCqEMDOE8Fq0PB+YDLQDugFeNGQ4UJnYmYiIiEgL1qycKTPbENgWGAusHUKYCakbLjPLnVBQJj5lwxNPPBGv23HHHZt8nA/jveeeeyrTsCrywnjJKQiqwZ97L2qaLFCZHOqeS48ePSrTMNJFQ326FJ+uADLLQ+Ti32CS33i8f705khGxyy+/HEj317d2M2bMAOCll14CYPr06fG2b775BoAhQ4YAsMwyy8TbPHLohURrXSohmXfjr4d8ESmX/J38d/Foeb4IzYEHHghkvk78m7jnmiQLPlajyLIXV23uZ4zv70Pfs02F4s9locf2/bMdqxqfgX5ef96Tkals0ZCGpk2bBqSjdcljekQq+drx6I2XX/HIlOcGJXkkPZnDeeWVVzbZpkrw4rX33nsvAOuvv35Rx/F8Jp+mCdIRpeaWohk/fjwA7dq1A+Cyyy4D0rmb5VbwzZSZrQDcD5wTQvgqWVOjicf1Bno3uaOIiIhIHSqoNIKZLUXqRuquEMID0epZZrZutH1dIOtcGiGEISGE7Qspxy4iIiJSb5qMTFkqBDUUmBxCGJjYNAroAQyIfj5ckRYmeDmDbCHPfLxCrA8lBTj88MOBdBKjJ3nus88+OY+TnI/O5xvbbLPNAHj11Vcb7e/JvN7NUQ7PPPMMkDm/UC0kh4l70nE+lezm826U5PVtjp49ewKZVax9aPH3338PZM767knsnnjq533llVfifTw51V9XPuQXMhPd64kPRc/2HvEK18nuPedVoH0Iuc82APnLDVSTd7d59wrAhhtumHP/559/Hki/ZpKvb0+U9YrzN9xwA5AuSZHcx5PNs0X6/fMuOStDNXhXZ7VTCZrLu8kq2ZXu7/9DDz20qMfff//9QGaXoJeucckuMe/SKsTDD6f+5Fbys7VQ3j3n7/FieZX05IwTzRlsNXXq1HjZyx55CRjfVqmu8kK6+XYDTgAmmtkb0br+pG6i7jWzXsBUoOkCJCIiIiKtjFUjoTE+mVlJJ/PhktVscyn8G7jfIZdDt27dgHRhv2L5t5q99947Xpcczg6ZJSg8AtdcPvS9Y8eORT2+OTxRNxkpKzS3ryEf2jtr1iwgHbkAaN++fbOPlxz6fs011xTVplrz14APQkhGlR588EEgf1FHHxLuBVSTPNpX7QR0H6DgUSAva5BNcri3v7e9WGcyUuzvreScac3hCcV+zGoXNPVr0Nwk8UL2LzYB3fdPJiY/9thjQPq1VwkeofZBBSeeeGLZju2fTYX8PUtGs/315SVGCilZUml+fWoVzfR5Rh944IF4nUeGy2BCIWlKmk5GREREpAR1NZ2Mf0MrZKhyS1CJb5T+rcR/luqqq67Kuc2HlALsv//+GduSkaZ8UydUc6iu5yklc5c8grDSSisB+Yt2JpVrygGfvd1z3erZu+++m/Gz0Hwnzy1Lvp5aCp9yKV9EykuqnHzyyfG6RYsWZeyTnH3eS3T4e6tTp05NtiNZIPOPf/wjULspdrxApv8sVrKcgZfFaE40Jtv+//73v+Nt5cxFzcVzpryo7Lbbbhtv81weLwVRDp7X40WR33rrLSBzCqYJEyaU7Xzl4uWHPIJXCV5monv37vE6jwwvWLAAqG2eX33clYiIiIi0UHWVM+XfHpPTK7Rp06a0RkWGDRsGZI64aTjqIhsvAJYczeffKPNFfaS6PDqQHFXnk2R7XkSx+VXZ+OvIo3Y33nhj2Y5daz7irW/fvvE6j9Rky9/waTbyvVdrlTPl195zpnbbbbd4m4/E8ohncyMhnoPoeY7ZRiF7flQyMlWvoz2XNF7A0wtHe/FgKCwa6VG2kSNHxuv8b1s1pg0qJy82uu+++wKNJ6FuLh9hDenooE86P27cuJKOXQTlTImIiIhUmm6mREREREpQV918IpVw6qmnAtmLw3m4OZn4+v7772c9jidBQrpQY2vk5QQGDkzX8D3jjDOKOtbxxx8PZHZ1iIi0IOrmExEREak0RaZEpCjJhHKfFqV///4ArL766o329yR8L/oJmYUwRURaIEWmRERERCpNkSkRKRvPp+rcuXO8bsqUKQDMmTOnJm0SESmBIlMiIiIilaabKREREZESqJtPREREJDt184mIiIhUmm6mREREREqgmykRERGREuhmSkRERKQEupkSERERKYFupkRERERKoJspERERkRLoZkpERESkBG2rfL7Pga+jn1L/1kDXsjXR9Ww9dC1bD13L2upQyE5VrYAOYGbjC6kmKi2frmXrouvZeuhath66lvVB3XwiIiIiJdDNlIiIiEgJanEzNaQG55TK0LVsXXQ9Ww9dy9ZD17IOVD1nSkRERKQ1UTefiIiISAmqdjNlZl3N7F0ze9/M+lXrvFI+ZvaxmU00szfMbHy0bjUzG21m70U/V611O6UxMxtmZrPN7K3EuqzXzlJuiN6rb5rZdrVruTSU41peamafRO/NN8zswMS2C6Jr+a6Z7V+bVks2ZtbezJ41s8lmNsnMzo7W671ZZ6pyM2VmbYAbgQOALYHuZrZlNc4tZfeLEEKXxFDdfsCYEEJHYEz0f2l5bge6NliX69odAHSM/vUGbq5SG6Uwt9P4WgJcF703u4QQHgeIPmePAbaKHnNT9HksLcMPwLkhhC2AnYEzo2um92adqVZkakfg/RDChyGE74CRQLcqnVsqqxswPFoeDhxWw7ZIDiGEF4C5DVbnunbdgDtCyivAKma2bnVaKk3JcS1z6QaMDCEsCiF8BLxP6vNYWoAQwswQwmvR8nxgMtAOvTfrTrVuptoB0xL/nx6tk/oSgKfNbIKZ9Y7WrR1CmAmpDwZgrZq1Tpor17XT+7U+nRV1/QxLdLfrWtYJM9sQ2BYYi96bdadaN1OWZZ2GEdaf3UII25EKNZ9pZnvUukFSEXq/1p+bgY2BLsBM4Npova5lHTCzFYD7gXNCCF/l2zXLOl3PFqBaN1PTgfaJ/68PzKjSuaVMQggzop+zgQdJdRfM8jBz9HN27VoozZTr2un9WmdCCLNCCItDCD8Ct5LuytO1bOHMbClSN1J3hRAeiFbrvVlnqnUz9SrQ0cw2MrOlSSVEjqrSuaUMzGx5M1vRl4FfAm+Ruo49ot16AA/XpoVShFzXbhRwYjRyaGfgS+9ykJapQd7Mr0i9NyF1LY8xs2XMbCNSicvjqt0+yc7MDBgKTA4hDExs0nuzzrStxklCCD+Y2VnAU0AbYFgIYVI1zi1lszbwYOq9T1tgRAjhSTN7FbjXzHoBU4Eja9hGycHM7gb2AtYws+nAJcAAsl+7x4EDSSUrLwR6Vr3BklOOa7mXmXUh1eXzMXAaQAhhkpndC7xNauTYmSGExbVot2S1G3ACMNHM3ojW9UfvzbqjCugiIiIiJVAFdBEREZES6GZKREREpAS6mRIREREpgW6mREREREqgmykRERGREuhmSkRERKQEupkSERERKYFupkRERERK8P9CPUmzhvLSywAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14e86eb5b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAB5CAYAAAAd6aSRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAGhBJREFUeJzt3Xu8VGW9x/HPLxVTQdG8ISCYoi8tFYSDeDQzNRNMUYi0gyYUeIl6eavUSq20Ii9YXipKCVRIRaWw8CiClzweTUUSlDhwvAC6AdOjIioG/s4fs56ZtWfPzJ691541l/19v1685tlrrVnrt9faa3jm9zzreczdEREREZH2+Vi1AxARERGpZ6pMiYiIiCSgypSIiIhIAqpMiYiIiCSgypSIiIhIAqpMiYiIiCSgypRIAzKz35jZJY12rDSZ2Rgze6zacYhI7VNlSqTOmNnLZva+ma0zs7fM7HEzO8vMsvezu5/l7pdX4NgtKhgVPNYPzey2Cuy3i5n9w8xWxZb1NTM3s807+nhJRNf66GrHISKlqTIlUp+Od/duQB9gInAhcHM5b6y1CkMVfAdYW+0gKk3XWSQ9qkyJ1DF3f9vdZwMnA6eb2acBzGyqmV0RlY8ws1VmdqGZrQZ+Hy3/opktjGW3Dgj7NbPeZnaPmb1uZm+Y2Q1mti/wG+AQM3vXzN7KP1b083gzW25mb5rZbDPbLbbOoyzaMjP7PzO70cws//cys2OB7wEnR8f6e7R8t2ifb0bHGN+W82VmewCnAj/LW/Vo9PpWdLxDYu+5Oor1JTMbWmS/F5nZXXnLfmlm10Xl7czsZjNrMrNXzewKM9ss75wtibKNL5jZQWZ2K7A7cG8U03ejbU8ws+ej6/ZwdF3Cfl6OrvNzwHpVqETSocqUSANw978Bq4DPFNlkV2AHMpmsM8zsIGAKcCbwCWAyMNvMtoz+k/8z8ArQF+gJ3O7uS4CzgP92967u3j3/IGZ2JJmKypeBHtE+bs/b7IvAvwEHRtt9ocDv85/AT4E7omMdGK36Q/R77gZ8CfipmR1V6Bc2s/+IKhVx15OppL2ft/zw6LV7dLz/jn4+GFgK7AhcCdxcqPIXxTXMzLaNjr1Z9LvNiNZPAzYCewEDgGOAcdG2o4AfAl8FtgVOAN5w99OAFWSykF3d/Uoz2zs61rnATsAcMpWtLrFYvgIcF/0uGwudGxHpWKpMiTSO18hUmAr5CLjM3Te4+/vAeGCyuz/p7pvcfRqwARgCDCZTWfmOu6939w/cvdyO2KOBKe6+wN03ABeTyWT1jW0z0d3fcvcVwENA/3J2bGa9gcOAC6OYFgI3AacV2t7dZ7h7PNt2ErC5u88q83cBeMXdf+fum8hUiHoAuxQ41ivAAuDEaNGRwHvu/oSZ7QIMBc6Nzuda4FrglGjbccCV7v6UZyyP9lfIycBf3H2uu/8LuBrYCvj32DbXufvK6DqLSApUmRJpHD2BN4use93dP4j93Ae4IGoqeitqsutNphLVm0wloj1Zjd3IZKMAcPd3gTei2ILVsfJ7QNc27PtNd18XW/ZK3r4LMrNtyGSWvlXmsYJsrO7+XlQsFu8MMlkhgP8gl5XqA2wBNMXO9WRg52h9b+B/y4wn//x+BKyk+TlYWea+RKSDqD1dpAGY2b+R+Q+1WAbJ835eCfzE3X9SYF+HALub2eYFKlT5+8n3GpnKQ9jXNmSaEV9t5X2F5B/rNWAHM+sWq1DtXua++5Fpsvxr1ErXBdgu6kM2pMCx2mMmcI2Z9QJOAkK/q5Vksn47FqmgrgT2LLLPQudg//BD1OTYm+bnoCN+FxFpA2WmROqYmW1rZl8k0y/pNndfVOZbfwecZWYHW8Y2ZnacmXUD/gY0AROj5R83s0Oj960BeuX10YmbAYw1s/5mtiWZfk9PuvvL7fj11gB9LRrywd1XAo8DP4tiOgD4OjC9jH0tJlPp6B/9Gxftvz+ZyszrZJpCP9mOOIniex14mEwH/5eiPma4exPwAJmK1rZm9jEz29PMPhu99Sbg22Y2MLoWe5lZqJCuyYvpTuA4MzvKzLYALiBTUXu8vXGLSHKqTInUp3vNbB2ZisD3gUnA2HLf7O5Pk+k3dQPwf8ByYEy0bhNwPJnO0ivIdPg+OXrrfOB5YLWZ/bPAfucBlwB3k6mQ7Umub1BbzYxe3zCzBVH5K2QyTK8Bs8j0A5tb6M1mNtrMno/i2ujuq8M/Ms2hH0U/b4qa8H4C/FfUFDeknTHPAI4m18QXfJVMNuwFMuf7LjL9r3D3mdGxZwDrgD+S6/v2M+AHUUzfdvelZJ5GvB74J5nrdLy7f9jOeEWkA5i7MsIiIiIi7aXMlIiIiEgCqkyJiIiIJJCoMmVmx5rZ0mgk4os6KigRERGRetHuPlPRCL//A3yeTAfVp4CvuPsLHReeiIiISG1LkpkaDCx39xejJ0luB4Z3TFgiIiIi9SHJoJ09aT7S7ioy81gVZWZ6dFBERETqxT/dfafWNkpSmSo02WeLypKZnQGckeA4IiIiItVQbJ7MZpJUplaRGVE46EVmIL1m3P23wG9BmSkRERFpPEn6TD0F9DOzPaKpJU4BZndMWCIiIiL1od2ZKXffaGbfBO4HNgOmuPvzHRaZiIiISB1IdToZNfOJiIhIHXnG3Qe1tpFGQBcRERFJQJUpERERkQRUmRIRERFJQJUpERERkQRUmRIRERFJQJUpERERkQRUmRIRERFJQJUpERERkQRUmRIRERFJQJUpERERkQRUmRIRERFJQJUpERERkQRUmRIRERFJQJUpERERkQRUmRIRERFJYPNqByCS1Gc/+1kAHnrooUT7efjhh1ssO+KII1os+9GPftTstV6YGQDbbLNNi3V77rknAKNGjWp1P1tuuSUA559/ftFjrFixIrvsxRdfBGDKlCkAzJw5M7tuw4YNZcVeaZ/4xCcAuPTSS1usW7RoEQD7779/i3XhXPTt2ze77MADDwRg5513BnLnJO7dd98F4Mtf/jIA8+fPz6778MMP2xy/VNZWW20F5P5O2uq4445rsaypqanFsh49egAwbNiwZu9bv359dpvPfOYzADz33HPtiqWSDj/8cAAGDhyYXebuAHzrW98CoE+fPi3e97GPZfI6H330UavH+Otf/5otX3XVVQDMmTOnnRF3HGWmRERERBKwUGtM5WBmiQ52yy23ADB69Oiytp83bx4A++yzDwC9evXKrvv73/8O5L5FluPkk0/Olu+6666y39eRQhbmsssuAwpnTjpKPFMTjhOWxY8bMjQhtnjG5pFHHqlYfEE4F+E1beGcHHnkkVU5findunXLlq+//noATj311ET7DJmW9n52/P73v8+Wx48fnyiWjnLeeecBuW+6aTvhhBOy5TS/ZXfv3j1bDlm2INzPAGvXrgXgvffeA2DkyJEt9lXq72K//fYDYOjQoUAuEwG5bMQrr7wCwOWXX55dFz7zy8lYVELXrl2B3N/siSeemF1Xzn3Qlm1KbRff5p577gHga1/7GpDLcqZt7Nix2XL47N1uu+2A5p875XxOtOUzJX4uwt/jgw8+CMCIESNafX87POPu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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14eb44fc5c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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iIiI1IoW50xFI/y+BfyKVILqFOCgEMIbpSueiIiISOtWTGRqa2BGCOHdqCfJOKB/aYolIiIiUhuKGbSzM5kj7c4hNY9VTmamroMiIiJSKxaEENZoaqdiKlPZJvtsVFkys0HAoCLOIyIiIlINuebJzFBMZWoOqWkMXBdSA+llCCHcANwAikyJiIhI/SkmZ2oK0N3M1oumlhgAPFCaYomIiIjUhhZHpkII35rZCcDDwArA6BDC1CZeJiIiIlJXKjqdjJr5REREpIa8GELYsqmdNAK6iIiISBFUmRIREREpgipTIiIiIkUoZmgEkZrTqVOnePm3v/0tAPvuuy8Aixcvjrf96le/AuDVV18F4IUXXoi3eZ7hZZddBsCbb75ZxhJXx7nnngvAKaec0mjb976Xega7884743Vvv/02AH/5y18qULrK8s9F+/bt43UjRowA0u+TiCzfFJkSERERKYIqUyIiIiJFqJuhEQYMGABkNktsttlmADz11FMA3H///Y1e9/nnnwNw0003latoFbfiiisC0LFjx3jdscceC8CBBx4IQLdu3Zp1zJEjRwKwZMmSjN9rzTbbpKePfPrpp4s61gcffABAnz59AJg2bVpRx2sNBg4cCMD1118PQNu2bRvtY5aaSSr53fHNN98AcOmllwIwZsyYeFutvy+LFi0CYJVVVonX+bWfO7fRpA+x4cOHZ7w+6YsvvgDgnXfeKVk5pbqOOeaYeNmbuzt37tzk6x555JF4+cknnwTgxRdfBGDixImlLGJVnXDCCQCsuuqqABx//PHxtjXXXLPJ148dOxaAc845J15XoRQLDY0gIiIiUm51E5n6z3/+A2RGHhLnBTKfpN2yZcsA+PDDDzP2BXjllVeAdKLx448/XsISl55HpJ599lkgHZkrBX9f/Il6n332ibc99thjJTtPuW244Ybx8gUXXJBzP49a+efDE6wBbrzxRgBWX311IB2d2HXXXeN93nrrrRKVuLL86dEjTNnku5/crFmz4uXevXsD6Xus1mSLTBXLPzP77bcfkNnBobVo165dvLz55psD6c4aSX379gWge/fuGeu9owLAd999l/M8/h54FObLL79sYYmrY6ONNgJg0qRJ8bpkq0Bz+L319ddfA3DzzTcDcNxxxxVRwup67733AOjatWsTexbmyiuvjJf/8Ic/lOSYTVBkSkRERKTc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YcKEchaxYu6+++54uX///jn38/9/pkyZArTukfJbqlevXgAMHTo0XuffEf59m80TTzwBpL+HWhtFpkRERESKsFxEpjwilUzy9O7ZDZ+Qrr/++nj5tNNOAzJn7K51bdu2BeCSSy4BMpMgG74Xu+22W7w8efLkCpSuNDzqBnDwwQcDsP322wNw++23x9s8suIJ6EkrrbQSAPvssw+Q/ixAOkrnSbV+7GwefPDB5v8BFeLJ9dB4QLyePXs22v/3v/89kH56Ts5j2VByrj2PeiUjYa5WB+30ORfXW289AI4//vh4m0fz8kWk/Dvld7/7HVA/EZikK6+8Ml72iFQ+99xzDwAjRowoW5kqpUuXLgAcd9xxAOy5557xtnzDgXz33XcA7LHHHkB9DZMxcOBAAK6++mog3WrQlMcffxxIf5fPnz+/DKUrniJTIiIiIkWwSg6aZ2ZlP1mynd7bZj0akRwssKH3338fyJzB2/NG6ol3SfanwGweffRRAPbaa694ned21ILkEBY+870PyOkROcg/IKBHlPwJMckjOv75+tnPfpbzOB4VTQ7KWG0eSUtGzQp9SoR0NCnfd0cy4pRvv6uuugrIjGRV08orrxwvt2mTCtz71Enf//73420e0S0kD8z//uRUFx6RuvPOO4sscevj98Xzzz8fr8v3GXjyySeB9Gfg1VdfLWPpyseHQQG47777gPw5QO6ll16Klz0S7sOn1MOgtqNHjwbggAMOAOAHP/hBzn0///xzAE4//fR43R133AFUNSL1Yghhy6Z2UmRKREREpAiqTImIiIgUoe4S0JPDHzz11FNA9mYJn2/Pm388BFmPTXuQHmH22muvzbnPokWLgHSCdS017SUlE+f9mt96661A4XN9nXHGGQD07t0byByF97DDDitJOavFhwNpTtNePUg2xyY/I0mDBw+Olz25vFjevJctAb+e+L3iHX3ydS7w5hzITK2oZZ5gDYU17/n368iRI+N18+bNK33BKmi11VYDMtMp/P/WZDN5Q55acu655wLppt9a0mRkysy6mtnjZjbNzKaa2UnR+g5mNtHM3o5+rlb+4oqIiIi0LoVEpr4FhoYQXjKz9sCLZjYROByYFEIYaWbDgGHAqeUran4nnngikPlkmY/Pt3fhhReWrUzVlnwS8Bp/x44dc+7/7LPPAumu7z74IKSfMmfMmAHU3hNU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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14e86f17518>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model.eval()\n",
    "\n",
    "for i in range(5) :\n",
    "    \n",
    "    unit_vector = torch.eye(100)[i,:]\n",
    "    \n",
    "    for images, labels in test_loader:\n",
    "\n",
    "        _, phi_x, _ = model(images.to(device))\n",
    "        values = torch.mv(phi_x.cpu(), unit_vector)\n",
    "        \n",
    "    top_idx = np.argsort(values.data.numpy())[-8:]\n",
    "    top_img = images[top_idx]\n",
    "        \n",
    "    imshow(torchvision.utils.make_grid(top_img, normalize=True), \"Direction to :\" + str(i+1) + \"th vector\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2) Random Vector"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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2jVPREREpLVliUxtAUwKIbwZQviC6NHsAbVploiIiEh7yDJ6fC/yK+1OAbYs9wIz06ODIiIi0i5mhBBW7GylLBdTHUZ6p0jlXTMbRDTopoiIiEg7qWiw8CwXU1OIxpRyqxIV0ssTQhgKDAVFpkRERKT7yZIz9TywrpmtGQ/JMBAYWZtmiYiIiLSHLkemQgjzzexo4EFgIeC6EML4Tl4mIiIi0q00dDgZdfOJiIhIG3khhLB5ZyupArqIiIhIBrqYEhEREclAF1MiIiIiGWQpjSBtqE+fPgA88sgjALz77rvJsh133BGADz74oPENk5ZyzjnnAHDyySd3WPaNb0T3YHfccUcyb+LEiQD88pe/bEDrGuPrr7/O+/ncc88ly/bff38g//wRkY622247AB577DEgdz6lHXDAAQDceeedDWtXrSkyJSIiIpKBLqZEREREMlA33wLmmGOOAWDppZfO+wlwxRVXALDffvs1vmHSEg4++GAAjjvuOACKlU7xMP3ee++dzPvyyy8BMItGmbrpppuSZRMmTKhPY+ussJtvyy1zQ4/69F133dX4hom0uF133TWZvvXWW4HcedTIckyNpMiUiIiISAaKTC0ghg0bBsCPf/zjkuvsueeeQC5JfezYsfVvmLQUj1QussgiVb3O1/eE9YEDBybL+vbtC8D7779fiyY2jEfZPOHefy+cFpF8hx56aDK95JJLFl3n448/TqZnzpxZ7ybVnSJTIiIiIhkoMrWA8KhTuTvqhRZaCMjdiS9o0tEYzwGqlccffzyZXn755YHcI8OzZs2q6b6ySOdBZbH66qsn015m4Q9/+AMAr732Wk32UW+e2+G5HunzorvmfbS6P//5z8m05/f5d9uoUaOa0ibJWXTRRQH41re+1em6Q4YMSaa9bEI7WzD/1xQRERGpkW4TmTr66KOB/Dtr77d9++2367Zfjy488cQTddtHV/30pz9NppdZZplO13/wwQcBePnll+vWpla01lprATB8+PBk3s033wzANddcA8BXX31V1TYXXjg6tY488kgA1lxzzWRZjx49AFh22WWB1opMFUZcrr322mR68ODBJV/nuVJnn312h2UeQXjvvfeA9insqZyp1rHtttsCsMceeyTzPv30UyA/96ZVfOc73wHggQceAGCVVVZJlv3mN78B4He/+13F29tkk02SaT+fPvnkEwB+//vfJ8vmzZvXxRbXxplnngnAbrvtVnIdz8X929/+1ogmNYwiUyIiIiIZ6GJKREREJINu08130UUXdZi3wQYbAPXp5nv99deBXDLxaaedliwbOnRozffXFVtvvXUyXUlS+ejRowGYP39+3drUirw7dKuttkrm+fTDDz8MwBtvvFHVNr///e8DcMEFF9SiiQ3zwx/+EIAVVlgBgKlTp1b0ugsvvDDvd086T/PuifT5Uc8u+KwKE9DTY/M9++yzTWnTgua73/0ukBuzLV1k+NJLLwXgySefbHzDivCuPYB7770XgJVXXhnI7z4//PDDgcq6+bysQLprfK+99gJyXc3jxo1LljVrbDsv9FxsLE/n/wdNmjQJaL9SKZ1RZEpEREQkg7aPTJVLiq2VjTfeGMi/21577bWB3B2HD78BzY9MeaTFIwHlpBMFu8PjqdXwIUHKFTKtRjrJNP0Id6G//vWvQGvemc2ZMyfvZ6U8munlD7797W8ny0444QQAevbsCeTu2gF22GEHAGbMmNHFFtdPYQL6NttskyzzyGU7j3LfqpZYYolk2iMdyy23XIf1pk+f3rA2VcKTzSEXkSrmX//6V8Xb9OiVR6NalUcQy5UM8ZIop556akPa1GiKTImIiIhk0PaRqfXXX7/u+/CI1C677FL3fdWCP3JfLk9qypQpALzyyivJvC+++KK+DWsBHh2BXFSh3F1kNX7yk58k07169cpbNmbMmA7r+aPd3VE6x2PfffcFctHcDTfcMFl2+umnA3D88cc3sHWVUdHOjjxqtOmmm3ZY9s9//hPI/rk+99xzk+n0sEQA1113XTJdmKfXaOuuuy4Ad999N5AfmS73+aikMK7nSnnpnVZXSXTfBz9u5TzJLBSZEhEREclAF1MiIiIiGbRlN98666yTTHvlc5fu9nvzzTer3rYnm0OuIrg/Jp720ksvAbnuG38UvhWk359SvLK1V6WuVnokcA/9T5s2Dch/RHj27NkAvPPOO13aT61415InQ0P57j1/f959991Ot33ssccCcNRRR5Vc5+KLL06mW7Ficz15uQVPPE+P29fKlcRrVQF91VVXBfJLb3g3e7uVWPCumhEjRnRY5uVpyj0eX85SSy0FwBZbbFFyHX/AAZqTluBjzwGcdNJJQK4ET7ob2LuGvSL5AQcckCzzyuXlDBgwAMivfF7Iv5ua9RDE7rvvnkwXe0CgUCO699JjAvqoFY36nCgyJSIiIpJBW0amykknvqYTgiv10EMPJdNekNO9+uqryfTOO+8MwFNPPQXk7kSayccirOTvvuGGGzpdZ7PNNkum/dFXL7uw+OKLJ8v8bmDmzJlALtEYcndhfldy2GGHAY2LVPkYeeeffz5Q/iGCdKkCT4L97LPPSq7vf/cpp5wCFI9g3nLLLUB+OYAFzYQJE/J+rrbaasmyVk7kzlq005Pq99lnHyA/4uIR4WeeeQaAAw88sAYtrp+ddtoJgKuvvrrkOl4k2CPVlSaie5T7+uuvB+B73/teh3W8eG6zI9zpaIx/zxZ+TiAXffbvu1GjRlW1H/9/rNz54eOGNosn4EN+RKhePKJd2BsFuUhxuk1+DDyaWe8xZxWZEhEREcmgLSNTK664Ysll3qcPuRHGn3jiiQ6v87umwuEy0tGFwruCdJ6EFykcOXIkAIMGDeqw30aPiu13M+XyOe6//36geMFI7/f2/J7+/fsny9JFGKux0korAbDWWmsBuXyK9Ejnnj9SDx4NWWONNTpdN/03er6c34l/+OGHHdb3x/qLRaScR6bapQyC/y1z584F8s+Zt956qyltapbCnKl0/pxPe9mHtNtuuw3IfX/4dtLfJ7179wZy+VT7779/ssynm5UL4wVn08NR+XnseU3FeE6YlwhID8HkuagedfrBD37Q4XXpiGWhjz76CGh++ZZ07lM5v/rVr4Bcgd5KeWTFf5aLTJ111llVbbvWtt9++2S63P85jz/+eNXbTpdK8V6RcuUX/Bwt1kPk5TXuueceIBcprjVFpkREREQy0MWUiIiISAZt2c3n3SvFpLsl7rrrLiDXzZcOS06ePBmorisuXbnZq94WK4lQLlxdT2uuuSZQPjTs3Zqff/45kKuWDrmk9HRXaa39/Oc/z2sH5I95WGuVvCcunVTvSfTpR7ELFeu+KeSJ7OlHqhvd/VtKunvSzyn/PPsDA+nP90033QTk/u70qPf+8EExft74I+TtojCxOF3a4NZbbwVgv/32y1un2OuKdUEUzks/Vu/jfDarm88/++kHSapxxRVXAPld64XdhNU+ePDCCy90qS3N4g/veMJ6jx49kmXl3oNqKp57t3t6O/fddx9QvkxLrXg6S2EbCnkqTDn+mfGxYr37O73tcvvw86jcOnvuuWen7chCkSkRERGRDNoiMuXJi162oFzCbzEekUrf/fld0zHHHJO3brHCa8X069cvbx1PkIT6P4JZSiWREk+Idl6cEroekfIohictt1sEop48efKOO+5I5nm5BR/f7N///nfjGwYMHz48mS4sGdGnT58O6/u54udIsUeUXTqBtFyifjsV7fSkccjdOReuU2xeNetAfuJ3M2yzzTZA18tW7LDDDjVry29/+1sgVxC0lRR+dtO/e7J0saTpSr6nKzkv/DOY3k4lxTNbRbrMhCeFt1P7CykyJSIiIpJBW0SmPCLlRTS7esdULK+hK+uk15s+fTqQK5gJ8OSTT3apfVlV8r689tpreb+XiyKly/+//vrrAAwbNqzDel7A0Au3paNf6cKfzfD3v/8dyH8Uu1Y8quDDFpQrf5AuarfYYovVvC3V8LyMbbfdNplXzTlVSX5COpJQLuehnYp2FotaV5MPdcEFFyTrnHjiiZ1u26N7jY7KlHvMvJ7b9jzKdG5rV4YEq6f0sfD83GJ5TpV8rhu5TjMdfPDBAPzpT38Cct+FZ5xxRrJOJREp/782Xax03LhxQK4cSTMpMiUiIiKSgS6mRERERDJoi26+cmHMDz74AMg9funlEIpJJ/X54/ie3F6Oj6OV7sbxELzv/8UXX+x0O63Ax4ryR7sXWWSRkuumE4x9bCl/xL9nz57JMg/j+rh9lVQbbxR/fPf2228HYNq0ackyDxGX41XliyVPe1fFjTfeCJQfE3HvvfdOpv1z1KzEcx/jKl0KQjoqlyTeleRy79qrdNtbbrllrf6UqviYZtV+PvzBii+//BLI/7708fp8lIH0d7p/h/r702pde2np8Rm9LIZXK/eSFpBfRgPyx3l99NFHgVwZgK6aN28eAEOHDk3mXXnllZm2WQ+bbLIJAH/84x+B3PvlD+B0ZuzYsUDuu9z/bsgfi7fZOo1MmVlvM3vUzCaY2XgzOzaev5yZPWxmE+Ofy3a2LREREZHuxjpLXjOzHkCPEMKLZrYU8AKwF3AoMCuEcJ6ZnQIsG0IY0sm2upQp59GjYgUyvSBnJVGGNC8DUFhAMX2HOH78eCB3RZxOyG5FHimpVeJourDmAw88AOQiNOmCbV3x61//OpmuZ9HOrvKR7F966SWgfCFWj/Z5UctW5w8hdLUoY7WPdpdb77LLLgPySym0Ci/Y6hGHrAnolRbt9HkeEU+PB5eOjNSLPzTiZT0q5YWQZ82aBeR/J/tYnB59Sn8mRo8eDUDfvn271uAWVJhQnS7a65GVZ555BshFatL8/Ln33nuB/AK5Pq6qP/hSbJzVRkgn3nvPkH9vFlPNgw2VliiqZtv+2fNE+Cq8EELYvNM2dLZCCGFqCOHFePpjYALQCxgAeKGa4UQXWCIiIiILlKpypsxsDWBT4Dlg5RDCVIguuMxspZq3LuZFMGtZDNOvqguLo/mdMuT3gbeDESNGAPkj0GeRHgLBoy9d5Xeinqvlka5W5ZHLchEpf9S9XSJSzj/XftdbrUruAiu9s/TioJ5LM2fOnC61qR5OPvlkIPcZ8BwZ6FrOVKVFO32e30E3IhqV5vmfWfNA00WAf/GLX+QtSxc5PuiggzLtpxV5dK6YI444AoD11luv5Dp+zng+VCsOp+O9QpCL+lx11VUl16+kpErhutWuX2zdI488EuhYsLrWKr6YMrMlgTuB40IIcyqtXGxmg4BBXWueiIiISGurqDSCmS1CdCF1cwjBH5ebFudTeV7V9GKvDSEMDSFsXkmfo4iIiEi7qSQB3YhyomaFEI5LzT8fmJlKQF8uhHByJ9tqaqlWf4Qf4OqrrwZypQFeffVVIH9cqZkzZzawdbXjIfRyyYCN4p8v7wrL2l1YT8sum3sg1du78847l1y/XFmJVuYViM8///xknnc9VKKSBPT0wxpeuXjzzTveT/m27r//fiD3+ZgxY0bF7ak3L1Hw1FNPJfMakYCeTlpuR+nSKl453I/3xRdfnCw76aSTGtuwJps/fz5Q/vzx7r2jjjqqIW3KyhPuL7nkEiB/xAkvC1HJ94ar9AGWwvXHjBmTzPM0jEceeQQo3/XaiYoS0Cvp5usLHAyMM7Ox8bzTgPOA283scOBtYL8SrxcRERHptjq9mAoh/AMolSC1Y22bU19LL710Mu1RhS+++ALIPQbdrtGotJ122gmAIUNylSr69+8PwMIL175Oq99p+R313XffnSx7+umnAbj88strvt9aSxdJLBeRareE80L+aHY6MuUR2WKPaVfCz6O33noLyC9S6lEmL6eRLjLoPFnZH8v38ThbgSeAp8cyPPbYY4Hcwx5ZE9D/8pe/JMsaPRZfrfXq1QsoXsTWP3vpcQoXBAMHDqxq/XQphHbgUZ8f/ehHQP536aqrrgrkjrn/P7Hyyisn65SLws6dOxfI/d88e/bsZNlZZ52Vt+59992XTHsR2UbRcDIiIiIiGbTFcDL15Fe9rV6QsxrPP/88APvuu28yz+/4TzvtNAD22qu6smD+/gwbNqzDMh/Cx4tBdkeTJk1KptMFR9uZR5EANtpoIyBXXmOfffbp9PWeZwi5yO7NN99ccn3/nPjdK8D222+ft47vt5UiU+7ZZ5/tMO0RpXReh0edvATF1ltvDeRHY7xQpb+u3DBY7cYfQS9W9NMfoU8XBF4QVDrsyTXXXAM0rxBnraTLefj0nXfembdOuhjtKqusAuSi1/369UuWeT6nfze1KkWmRERERDLo9Gm+mu6syU/zHXPMMcm05yV4xGGDDTZoSpukdaSLDBYOM3TppZcm0yeccELd2jB48GCgfPE7kVbkA5z7U48rrdSxjnO7PgHbVd47kI6qFD7V5kNWQS5S+8knnzSqidK52gwnIyIiIiKl6WJKREREJIMFKgE93ZXnIdZKRqQWaZQbbrih2U0Q6RIvylqse++QQw5pdHNawu677w4ULzzp8x577LFknrr32pciUyIiIiIZLFCRqXQhQdezZ08g90hmYeKxLDjeeOONZNqHQPG77AsvvLAhbfBSHSLtxsseuPRDFF4uYUFTrgjuK6+8AsAZZ5zRqOZIHSkyJSIiIpLBAhWZ2mWXXZLpBx98EMj1W0+ePLkZTZIWMnHixGTah8QQkcp4cVLJ8SLH6eFVnA/2rDyp7kGRKREREZEMdDElIiIiksECVQFdREREpAqqgC4iIiJSb7qYEhEREclAF1MiIiIiGehiSkRERCQDXUyJiIiIZKCLKREREZEMdDElIiIikoEupkREREQyaPTYfDOAT+Of0v5WQMeyO9Hx7D50LLsPHcvmWr2SlRpaAR3AzMZUUk1UWp+OZfei49l96Fh2HzqW7UHdfCIiIiIZ6GJKREREJINmXEwNbcI+pT50LLsXHc/uQ8ey+9CxbAMNz5kSERER6U7UzSciIiKSQcMupsxsVzN73cwmmdkpjdqv1I6ZTTazcWY21szGxPOWM7OHzWxi/HPZZrdTOjKz68xsupm9kppX9NhZ5JL4XH3ZzDZrXsulUIljeaaZvRufm2PNbLfUslPjY/m6me3SnFZLMWbW28weNbMJZjbezI6N5+vcbDMNuZgys4WAy4H/BjYCDjSzjRqxb6m5/woh9Ek9qnsK8EgIYV3gkfh3aT3XA7sWzCt17P4bWDf+Nwi4skFtlMpcT8djCXBRfG72CSGMAoi/ZwcC/xG/5or4+1haw3zgxBDChsBWwFHxMdO52WYaFZnaApgUQngzhPAFMAIY0KB9S30NAIbH08OBvZrYFikhhPAEMKtgdqljNwC4IUSeBZYxsx6Naal0psSxLGUAMCKE8HkI4d/AJKLvY2kBIYSpIYQX4+mPgQlAL3Rutp1GXUz1At5J/T4lniftJQAPmdkLZjYonrdyCGEqRF8MwEpNa51Uq9Sx0/nano6Ou36uS3W361i2CTNbA9gUeA6dm22nURdTVmSeHiNsP31DCJsRhZqPMrPtmt0gqQudr+3nSmBtoA8wFbggnq9j2QbMbEngTuC4EMKccqsWmafj2QIadTE1Beid+n1V4L0G7VtqJITwXvxzOnA3UXfBNA8zxz+nN6+FUqVSx07na5sJIUwLIXwVQvgauIZcV56OZYszs0WILqRuDiHcFc/WudlmGnUx9TywrpmtaWaLEiVEjmzQvqUGzGwJM1vKp4GdgVeIjuMh8WqHAPc0p4XSBaWO3Ujgx/GTQ1sBs73LQVpTQd7MD4nOTYiO5UAz+6aZrUmUuDy60e2T4szMgGuBCSGEC1OLdG62mYUbsZMQwnwzOxp4EFgIuC6EML4R+5aaWRm4Ozr3WRi4JYTwgJk9D9xuZocDbwP7NbGNUoKZ3Qr0A1YwsynAGcB5FD92o4DdiJKV5wKHNbzBUlKJY9nPzPoQdflMBo4ACCGMN7PbgVeJnhw7KoTwVTPaLUX1BQ4GxpnZ2HjeaejcbDuqgC4iIiKSgSqgi4iIiGSgiykRERGRDHQxJSIiIpKBLqZEREREMtDFlIiIiEgGupgSERERyUAXUyIiIiIZ6GJKREREJIP/B0ruIfWzwBjyAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14ea61cf4e0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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ld5Xk0rEJ1erUSIiIiLNotM5U0mV5P8AO5BJUJ0A7BdCeLl6zRMRERHp2iqJTG0GTA0h/DeE8CWZqdmDq9MsERERkeZQyd3j+5BbaXcasHmpB5iZpg6KiIhIs5gZQliuvZ0q6Uy1udM7BSrvmtkRZG66KSIiItJMyrpZeCWdqWlk7inlViJTSC9HCGEUMAoUmRIREZHWU0nO1ARgdTNbNbm1xFBgXHWaJSIiItIcOh2ZCiEsSO6+/iDQDbg+hDC5nYeJiIiItJS63k5Gw3wiIiLSRJ4NIWzS3k6qgC4iIiJSgUoS0EWkxay22moA3HvvvQBMmjQp3XbggQcC8NVXX9W/YSIiXZgiUyIiIiIVWKgiU4sskv11jzvuOAD+8Ic/5Ozz8MMPp8s77rhjfRomDTFnzhwAevToAcDpp5+ebjvvvPMa0qZG23vvvQHo379/zk+AX/ziF8DCG5kaMGBAuvzII48A8O677wKw/fbbp9s+/PDD+jasjr755pucnwBPP/00AEOGDAGy52Rh5p8fJ510Uptt3/pWJoZx2223AfDaa6+l237zm9/UoXX1tfXWWwPw2GOPAbmvHbfvvvsCcPvtt9etXdWmyJSIiIhIBdSZEhEREanAQjHMZ5a5881NN92UrvvZz34GQH5piHqWiqi1nj17pst/+ctfANh5551z9pkwYUK6fMkllwBwyy231KF1jefhZr/mRx55ZLptt912K/q4U045BYDZs2fnrP/000/T5ddff71q7ayHffbZB4CzzjorZ/2dd96ZLn/xxRd1bVNXc8wxx6TLSy65ZM7PK6+8Mt3m57IVFRrm23zzzXN+3nHHHfVvWBdw0EEHpcvHH388UPjviZ+7PffcE8gdNve/VWPGjAFgypQptWlsje20007psv/dzf+8bTWKTImIiIhUoKUjU57o598SPBpVyvjx42vapnrq169fuuzfFPK/FWyySbYWmUevfAr8ueeem2576qmnatXMLqNPnz4Fl/PFkxRi06dnb03p3zonTpxYpdZV3w9+8IN02b8Jd+vWLWefJ598Ml1eWBPPr732WgAOPvjgovvsvvvu6bInqsdlJVqFR078szVe5z8XVh6lBFh00UXLfly8ryesDx06FICtttoKgPfff78aTaybQw89NF3u3r17wX3mzp2bLs+aNavWTao5RaZEREREKtDSkam1114baFv+oJB///vfAIwdO7ambaqneIq2f0uOp3fn82+bnlfl34ogO2X31ltvBWDmzJnVbWwDrLDCCgAsu+yyQPnlEHr37g3kToeP10M2itGVI1MrrrhiupwfkXrnnXeAhSd/rhSPOpWKvMTnL47atBqPbMc5U/77tmouTLk8Gl0Nq6yyCpD9TIr/hr3yyitVO061LbbYYgB897vfbXffkSNHpsteNqGZte67XkRERKQOWi4yFY9be1G0UjwiNXjwYADee++92jSsAaZNm5Yu+7emXr16AXD44YcDcMghh6T75H/z/t73vpcuX3bZZUC2cOPo0aPTbVdccQUACxYsqFrb68FzgPyaH3bYYWU9bqmllgJg0003BeDSSy8FYPHFF0/3GT58OABTp04FsuevKzn77LOLbrvhhhuAhbsAo7/W/XqX8uCDD6bLL7zwQs3a1GjKmSquUGTuuuuuA7KfB4XEhT3jPFXIzhCM8zG7cmHPM888E4Bddtml6D4+SvK3v/2tHk2qG0WmRERERCqgzpSIiIhIBVpumG+//fZLl9dYY42i+82fPx+AESNGALlh1Fb09ttv5/z0+2n5/yF7f6Q111yz6POsv/76AFx00UVttv3pT3+qTmO7OL+nn5fRWHfddQH40Y9+lO7z6KOPAtkwvSfuQ+OnOa+66qoALL300m22vfXWW0BugduF1cCBA4HyEsqfeeaZdLnZhrs7olACun+WLAzlU0qJS+/4pJZy0kYuvvjiNuvyJ8PEBUFHjRoF5H52N5oXqi10L0Ln7yNPfWj052C1KTIlIiIiUoGWiUz5t+0TTjihrP19Kubjjz9eqyY1hTgJ2ZOOPYqy+uqrp9t69OhR9DnOOeccIDstNo5aFbpD+MJkww03BLLfVKHx38iGDBkCQP/+/dts8/dDV55+XUuedA650YBiPNG2FaZ2l6NQAvqWW24JwBZbbAHA7bffXv+GdQGffPJJweX2xJFML4Hgk39+/etfA7llV+655x4AtttuO6BrlKnxAsClymP4Z4rfjqvVKDIlIiIiUoGmj0x95zvfAbJTk7///e8X3TfOaxg2bFhtG9aE3nzzTQA222wzAPbee+90W9++fYFs5C/+puQF2s4//3wArr766nRbR76hNTu/bVFX59dpYY8aFhLfHLxUrpSXHXnppZcA+PLLL2vbsC5CRTvrw8sf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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14e86f62e48>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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qaRK7+tJJeJTqtUoERERkWbR5pyppEryG8DPySSojgT6hxBerV7zRERERBpbJZGpTYFJIYS3QgjfkJmavXt1miUiIiLSHCpZPb4buZV2pwKblbqDmWnqoIiIiDSLj0IIXed1UCWdqRYrvVOg8q6ZDSCz6KaIiIhIMylrsfBKOlNTyawp5VYiU0gvRwjhWuBaUGRKREREOp5KcqZGAr3MbJVkaYl+wLDqNEtERESkObQ5MhVCmGtmA4HHgE7A0BDC+HncTURERKRDqelyMhrmExERkSYyOoSw8bwOUgV0ERERkQqoMyUiIiJSAXWmRERERCpQSWkEERERyXPuuecCcNJJJ7W47Qc/yMQw7r77bgAmTpyY3nb66afXoHXSHhSZEhEREamAOlMiIiIiFdAwn4hICYcffjiQOwTTrVu3ed5v+PDhADzzzDMAjB49Or3t8ccfr2YTpQEccMAB6fZxxx0HQKHSQ99//z0Ae+65JwDffvtteptZZpW2W265BYAJEya0T2Ol6hSZEhEREamAinbKfGuRRRYBYJlllgGy3yZj/fr1A+BHP/pRus8TSP0bpjv66KPT7Wuvvba6jZWaW3PNNQF44oknAFh++eXb9Dgebfjmm2/SfTfccAOQ+zfTTPy1A3D11VcDsP/+++cc468TaPlauf/++9PtwYMHA/DGG28A8NVXX1W3sTUycODAdHvIkCFFj/O/h1KfvVOmTAGgT58+AHzwwQfVaKK0jYp2ioiIiLQ3RaakhcUWWwyAFVZYoegxm2++ebq98cbFO+0777wzAKuuuiqQ/Vb20ksvpcdcfvnlAFx//fVtbHH5jj/++HR7r732AmCzzTbLaRuU/tZYzjfLo446CoC//vWvbW+s1JXnwAwdOrSixyn09/LFF18A8NxzzwHw61//Or1t5syZFZ2vPa299toAPPnkk+m+ZZddtuCx5b6e3DvvvAPAQw89lO7zCI/f1sji52SrrbYqelw57x9+zE033QTAhRdemN722muvVdROaTVFpkRERETaW9PP5uvatSsAP/vZzwDYaKONyrpf586dATjyyCPneWyxHBmAe+65B4DDDjss3ffZZ5+V1YZ68sjSL37xi3TfFltsAWTzg3784x9X7Xz+Lcx/xo/99ttvV+08xXjuwSmnnJLuW3rppdvtfJdddhkAnTp1AuCaa65pt3NVg0dhPJenHC+//HK6/fDDD+fcFkcl/PXw1ltv5fwfoHv37jnHP/bYYwC899576TFff/112W2qJs9b8fZ6xLYaFl10UQD69u0LwCqrrJLe1siRKY+4FotGAbz55pst9vnrfsEFFwSgR48eLY7xfcccc0y6z9+LPB/po48+akuza6JQpMmj7aU+Z+LCnuecc07Obf66fP/999N9zVDYc5tttkm3Paq28sorA9loWyEnnngiUPizthCfKTty5EggN4Lpeatz584tt9kVUWRKREREpALqTImIiIhUoCkT0Lt06ZJuv/7660B2enu5v085SYCtOTYOXR566KFltaGWNtlkEwB++tOfAtmw82qrrdau5/XnzEOtn376KQCzZs1KjznttNMAuO+++9qtHWuttRYA48aNK3pMPDTlYfU77rijxXFjx44FsuH2Xr16FX2s559/HiidkFov8bDV7Nmzq/rYrU0+zhcXK/TSBGeddRYAH3/8cYWtax2fRLDSSisVPWadddZJt/MnbpTz/uFD7ACjRo1qUztr4emnnwayw+YxHyL295bvvvuuxTGeXrHjjjum+/bZZx8Adthhh5xjYpMmTQKgd+/e6b56Df8Ws8QSS6TbPgw6bdo0AL788sui91tggWy2zQknnABk1/bzv5l4mM/fS3wYuhENGjQo3b7ggguA6n3Wlnu8px785je/AbKfPW2gBHQRERGR9taUCeh/+9vf0u1Kk4g9udQjCDFPavNoztZbb130cTyhtJHESd6+fEU1k2jzeeJpPEXYpznnJyjXmk8n9gRayEaWxowZA8DZZ5+d3ub7Stl9990BWGONNVrc5t+Y4ghNo4mTPD/55BMAllxyyXo1J4dPwY+3/Zv4xRdfXNO2xJNLionb60nThxxyCAD9+/cvej+Psn3++eeVNLEheIS5UETK+e957733pvt8++abbwayhXJjq6++OgA9e/ZM9/moRKOIIx+tiYLECdKerO1RLo9Urbjiiukx/p663XbbAY2ZlD958uR6N4FddtkFgIUXXrgm51NkSkRERKQCTRmZKvdbnI9Xe1HIRx55JL3NIwY+lu1j8oX4MhJTp04tekz8TatRHHvssel2ayJSPi39iCOOSPd5dM6nw8+YMaPF/TzXo5FLQ8RFNNtaUHO99dYDssU+S43v1zInsbW8cCTA9ttvD2Rz6Ly4aVyc1Z18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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14e86ecf358>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAB5CAYAAAAd6aSRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAHm5JREFUeJzt3Xe8FOX1x/HPCSVFUDQqKmIJGqMxiliJiRgbxoY1oD+xREUSJZoQa+JLTWwxloSfFVtIEBUL9oZEY36xo0QFNGIUQREpoqiIos/vj52zM7t3d+/eO1vuLt/368XrDjOzM8/d2d377HnOnMdCCIiIiIhI+3yl3g0QERERaWTqTImIiIikoM6UiIiISArqTImIiIikoM6UiIiISArqTImIiIikoM6USBMys6vM7IxmO1ctmdkRZvZ/9W6HiHR86kyJNBgze9PMlpjZYjNbZGZPmNlwM8u+n0MIw0MIv6/CuVt0MKp4rrPMbGwVjtvVzF4xs9mJdeuZWTCzzpU+XxrRtd6l3u0QkdLUmRJpTHuHELoD6wIXAKcA15XzwI7WYaiDk4D36t2IatN1FqkddaZEGlgI4YMQwt3AYOBwM9sUwMz+YmbnRMs7mtlsMzvFzN4FbojW72VmUxLRrc38uGbW28zuMLN5ZrbAzC4zs42Bq4D+ZvaRmS3KP1f0/2PMbIaZLTSzu81srcS2EEXRXjOz983scjOz/N/LzHYHTgcGR+f6d7R+reiYC6NzHNOW58vM1gcOBc7P2/R49HNRdL7+icdcFLX1DTP7cZHjnmpmt+Wt+7OZjYqWVzKz68xsjpm9bWbnmFmnvOdsehRtnGZm/czsb8A6wD1Rm06O9t3HzKZG1+2x6Lr4cd6MrvOLwMfqUInUhjpTIk0ghPAMMBv4YZFd1gBWIRPJGmZm/YDrgWOBbwJXA3eb2VejP/L3AjOB9YBewM0hhOnAcODJEEK3EEKP/JOY2U5kOio/AdaMjnFz3m57AVsDm0f7DSzw+zwInAfcEp1r82jTTdHvuRZwIHCeme1c6Bc2s0OiTkXS/5LppC3JW79D9LNHdL4no/9vC7wKrApcCFxXqPMXtWsPM1sxOnen6HcbF20fAywDNgC2AHYDjo72PQg4CzgMWBHYB1gQQhgKvEUmCtkthHChmX07OteJwGrA/WQ6W10TbTkY2DP6XZYVem5EpLLUmRJpHu+Q6TAV8iVwZghhaQhhCXAMcHUI4ekQwhchhDHAUmA7YBsynZWTQggfhxA+DSGUm4j9P8D1IYTnQwhLgdPIRLLWS+xzQQhhUQjhLeBRoG85Bzaz3sAPgFOiNk0BrgWGFto/hDAuhJCMtu0HdA4hTCjzdwGYGUK4JoTwBZkO0ZpAzwLnmgk8D+wbrdoJ+CSE8JSZ9QR+DJwYPZ/vAZcCQ6J9jwYuDCE8GzJmRMcrZDBwXwhhYgjhc+Ai4OvA9xP7jAohzIqus4jUgDpTIs2jF7CwyLZ5IYRPE/9fFxgZDRUtiobsepPpRPUm04loT1RjLTLRKABCCB8BC6K2uXcTy58A3dpw7IUhhMWJdTPzjl2Qma1AJrI0osxzuWxbQwifRIvF2juOTFQI4BDiqNS6QBdgTuK5vhpYPdreG3i9zPbkP79fArPIfQ5mlXksEakQjaeLNAEz25rMH9RiEaSQ9/9ZwLkhhHMLHKs/sI6ZdS7Qoco/Tr53yHQe/FgrkBlGfLuVxxWSf653gFXMrHuiQ7VOmcfekMyQ5T+jUbquwEpRDtl2Bc7VHrcCF5vZ2sB+gOddzSIT9Vu1SAd1FtCnyDELPQff8/9EQ469yX0OKvG7iEgbKDIl0sDMbEUz24tMXtLYEMJLZT70GmC4mW1rGSuY2Z5m1h14BpgDXBCt/5qZbR89bi6wdl6OTtI44Egz62tmXyWT9/R0COHNdvx6c4H1LCr5EEKYBTwBnB+1aTPgKODGMo71MplOR9/o39HR8fuS6czMIzMU+q12tJOoffOAx8gk+L8R5ZgRQpgDPEymo7WimX3FzPqY2YDoodcCvzazLaNrsYGZeYd0bl6bxgN7mtnOZtYFGEmmo/ZEe9stIumpMyXSmO4xs8VkOgK/AS4Bjiz3wSGE58jkTV0GvA/MAI6Itn0B7E0mWfotMgnfg6OH/h2YCrxrZvMLHHcScAZwO5kOWR/i3KC2ujX6ucDMno+WDyYTYXoHmEAmD2xioQeb2f+Y2dSoXctCCO/6PzLDoV9G//8iGsI7F/hXNBS3XTvbPA7YhXiIzx1GJho2jczzfRuZ/CtCCLdG5x4HLAbuJM59Ox/4bdSmX4cQXiVzN+L/AvPJXKe9QwiftbO9IlIBFoIiwiIiIiLtpciUiIiISArqTImIiIikkKozZWa7m9mrUSXiUyvVKBEREZFG0e6cqajC73+AXckkqD4LHBxCmFa55omIiIh0bGkiU9sAM0II/43uJLkZGFSZZomIiIg0hjRFO3uRW2l3Npl5rIoyM906KCIiIo1ifghhtdZ2StOZKjTZZ4vOkpkNA4alOI+IiIhIPRSbJzNHms7UbDIVhd3aZArp5QghjAZGgyJTIiIi0nzS5Ew9C2xoZutHU0sMAe6uTLNEREREGkO7I1MhhGVmdjzwENAJuD6EMLViLRMRERFpADWdTkbDfCIiItJAJocQtmptJ1VAFxEREUkhTQK6iDSZDTbYAID77rsPgClTpmS3HXrooQB8/vnntW+YiEgHpsiUiIiISArLRWTq4IMPBuC0007Lrttkk00AWLp0KQA777wzAE899VSNW1dfnTvHL4ETTjgBgAsvvLDFfo888ggAAwcOrE3DamDRokUAdO/eHYAzzjgju+28886rS5vq7cADDwSgT58+OT8Bjj76aGD5jUz17ds3uzxp0iQA3n77bSD+/ACYN29ebRtWZ/5eOfnkk3PWf+Ur8Xf1W2+9FYDXXnsNgN/+9rc1al31ffnllzk/AZ5++mkAfvKTnwDx62R5tMMOOwDw2GOPAbnPkxs8eDAAt99+e83aVWmKTImIiIikoM6UiIiISApNPcw3YMAAAG644QYAOnXqlN3mJSG6du0KxKHI5WWYzywzG9BNN92UXbfffvsB8XOTVMsSGrXi4Wb/3Y499tjstr333rvo43y4eOHChTnrP/744+zy66+/XrF21sJBBx0EwNlnn52zfsKECdnlTz/9tKZt6mhGjBiRXV5ppZVyfl5xxRXZbf5cNrOhQ4dml0888USg5WdEcjhn//33B+IhYv/8ARg7diwA06dPr05jq6zQMN+2226b8/OOO+6ofcPqaPfdd88u+9+Y/M/bZqPIlIiIiEgKTR2Z2nrrrYHciNTyzpNC/dukR6NaM3HixKq1qaPo1atXweV8noyf75134qkp/Zv4c889V6HWVd73vve97LJHB/LfK08++WR2eXlNPL/22msBOOyww4rus88++2SXPVE9WVai2XhEDqBLly5lP873TSarDxkyBIDtt98egHfffbcSTawZj7IlE+59XTICtzw54ogjssvdunUruM/ixYuzywsWLKh2k6pOkSkRERGRFJouMvWLX/wiu3zmmWe2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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14ea6191668>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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V6tRIiIiIs2i7JyppMLvq8DPyCWojgb6hxDGV695IiIiIo2tksjURsDkEMLryZ0kQ4HdqtMsERERkeZQSdHOVcivtPsWuXmsijIz3TooIiIizWJ2CGGFhe1USWeq0GSfrTpLZnYYcFgFzyMiIiLSEYrNk5mnks7UW+SmMXCrkiuklyeEcDVwNSgyJSIiIp1PJTlTo4F1zGzNZGqJfsC91WmWiIiISHMoOzIVQvjSzI4B/gl0AYaEEMYt5GEiIiIinUpdp5PRMJ+IiIg0kTEhhB8tbCdVQBcRERGpgDpTIiIiIhVQZ0pERESkApWURhAREZEW/vSnPwFw6qmnttr2ta/lYhh33HEHAJMmTUq3/fa3v61D66QWFJkSERERqYA6UyIiIiIV0DCfiKQGDBgAZMMNq6yySkmPGzFiBABPPvkkAGPGjEm3Pfzww9VsokhDOuCAA9Ll448/HoBCpYe++uorAPbcc08Avvjii3SbWW6WtptvvhmACRMm1KaxUnWKTImIiIhUQEU7FxFLLbUUAIMGDQJgv/32a7WPJ0b6N6fYPffcA8A555wDwKuvvppu++yzz6rbWKm7b3/72wA88sgjAPTs2bOs4/g36/nz56frrr/+egCOOuqoCloo0tiOOeaYdPnSSy8tup9fI2393zt16lQANt98cwBmzpxZjSZKeVS0U0RERKTWFJnqxNZdd910+dFHHwVg+eWXL7p/Kd+Y3Jtvvpku33///UD2bSzeJs3B8z2GDBlS0XEK/Q198sknAIwcORKA/fffP9323nvvVfR80hyWXnppAFZaaaWi+2yyySYA/OhHxYMAffr0SZfXWmstIPube/HFFwG44oor0n0GDx5cZovbzz9jAbbccsui+5XyOev73HjjjQAMHDgw3fbKK69U1E5pN0WmRERERGpNd/OV4Jvf/CYAu+++e7qu5bcL/x1g1KhRALzwwgv1amJBRx55ZLpcLCL12muvtVrnr2nxxRdP162++up5+8S/H3300UD2PsW5A7Nnz25vs2sqvuPGc3lK8dJLL6XLDzzwQN42P/cfffRRuu7111/PW9erV69W+//zn/8E4O233063ff755yW3qZo8R8Pb65GEavjGN74BwHbbbQfAmmuumW5r5MjUD3/4QwA23nhjIP96+t73vrfQx7eVg9iW4cOHA9CvXz8g/26vRuaRpe233x6ATTfdNN3mnw3rrbde1Z7PP6f8px/7jTfeqNpzlNOemEfGjjjiiKKPiwt7nnvuuXnb/PNq+vTp6bpmKOy51VZbpcseVVtttdWALNpWyCmnnAKUfs343cOjR48G8kdFrr76agC+/PLLUptdEUWmRERERCqgzpSIiIhIBRaJBPS111671bqWw1s+FHHBBRek62bMmAHAIYccAuQPT7Rl1qxZABx44IEAvP/+++m2eg79Pf744+my32LrfIgrDj8vWLAgb5+uXbumyzvuuCMA++yzDwA77LBDwf0AJk+enC737t0b6LjhK+fDVnPmzKn6sduTuF9IXJjPSxOcffbZAHzwwQcVtq59rr32WgBWXXXVovt897vfBQonE5fyXsTDP88991xZ7ayVLl26pMuXX345AIcddlhZx6rW34V/jgCMHTu2rGNV249//ON0eYsttgCyz5JCn7fVEr+XPnzz4YcfAtnn7G9+85t0n7vvvrtmbWmpe/fu6bKnVfj/IZ9++mnRxy22WJZtc+KJJwLZ3H7+euNhPk9u96H5RnTSSSely/5/ainXQXuvmbb293QMv37876QMSkAXERERqbVOE5nyb5THHntsum7DDTcE8r9FuTPPPBPIZu72ff7zn/+k+1T6zdLF0ZCHHnoIyL89vFbaikz5NCHvvPNOWce+6aab0mVPlC3k+9//PgATJ04s63mqxSOP06ZNS9cts8wyVTl2tf5OYp6Ueskll1TtmNXiJTc8qRjg0EMPBaB///5A4ffCo2xxcmqjTZcRRxf8JoJu3boBWUJ5bO7cuUWP1Z6/C//7hPwbPyA/Chzfft8RPMn7qaeeStdV82aFlnwEwV+3l2GB1jeCdCZ//OMfgSxSFf9N+DWzzTbbAI13kw/AXnvtlS7ffvvtQP0jU27llVcG4N133y3pmAUoMiUiIiJSa01fGsFvX/YJWkvNb7jtttuALFJxyy231KB1OT169EiXPYpTj8jUn//853R5/fXXB7JcqUpzcbz8A7QdmWoUXjhy2223Tdd5bscJJ5wAZLd2x0477TQApkyZ0mqb5/74exF/O+rbty+QfbP29x+y/DO/5T0+tt/ie9lll5X0ujqCfzOOo0rx+1rME0880epxjSbOq/C8F79dO45aOY8glJsT6OUWvLwIZFP7uJ/97GfpckdHpo477jig/dEoL/9x+OGH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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14eb4572518>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model.eval()\n",
    "\n",
    "for i in range(5) :\n",
    "    \n",
    "    random_vector = torch.rand(100)\n",
    "\n",
    "    for images, labels in test_loader:\n",
    "\n",
    "        _, phi_x, _ = model(images.to(device))\n",
    "        values = torch.mv(phi_x.cpu(), random_vector)\n",
    "        \n",
    "    top_idx = np.argsort(values.data.numpy())[-8:]\n",
    "    top_img = images[top_idx]\n",
    "        \n",
    "    imshow(torchvision.utils.make_grid(top_img, normalize=True), \"Direction to :\" + str(i+1) + \"th vector\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 9. Small perbertation using Backprop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# In the paper, they use L-BFGS to solve equation with constraints.\n",
    "# However, in this code, backpropagation method is used instead of L-BFGS."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def imshow(img, title):\n",
    "    npimg = img.numpy()\n",
    "    fig = plt.figure(figsize = (5, 20))\n",
    "    plt.imshow(np.transpose(npimg,(1,2,0)))\n",
    "    plt.title(title)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "sample_img = mnist_test[0][0]\n",
    "outputs, _, _ = model(sample_img.to(device))\n",
    "\n",
    "_, predicted = torch.max(outputs.data, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14eb4577710>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "imshow(torchvision.utils.make_grid(sample_img, normalize=True), \"Predicted label : \" + str(predicted.item()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Attack successed!\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14eb4509e48>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Attack to answer a different number(num) to digit '7'\n",
    "\n",
    "for num in range(10) :\n",
    "    \n",
    "    r = torch.rand(1, 28, 28).cuda()\n",
    "    r.requires_grad_()\n",
    "\n",
    "    optimizer_adv = optim.Adam([r], lr=0.001)\n",
    "\n",
    "    for i in range(3000):\n",
    "\n",
    "        X = torch.clamp(sample_img.cuda() + r, 0, 1)  \n",
    "        Y = torch.tensor([num]).cuda()\n",
    "\n",
    "        outputs, _, _ = model(X)\n",
    "        _, predicted = torch.max(outputs.data, 1)\n",
    "\n",
    "        loss_adv = r.abs().sum() + loss(outputs, Y)\n",
    "\n",
    "        optimizer_adv.zero_grad()\n",
    "        loss_adv.backward(retain_graph=True)\n",
    "        optimizer_adv.step()\n",
    "\n",
    "    if predicted.item() != 7 :\n",
    "        print(\"Attack successed!\")\n",
    "        imshow(torchvision.utils.make_grid(X.data.cpu(), normalize=True), \"Predicted label : \" + str(predicted.item()))\n",
    "        \n",
    "        break"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
